﻿namespace TestTool.Tests.Definitions.Attributes
{
    using System;
    using TestTool.Tests.Definitions.Enums;

    [AttributeUsage(AttributeTargets.Method)]
    public class TestAttribute : Attribute
    {
        private TestTool.Tests.Definitions.Enums.Category _category;
        private TestExecutionOrder _executionOrder = TestExecutionOrder.Normal;
        private Feature[] _features = new Feature[0];
        private Functionality[] _functionalityUnderTest = new Functionality[0];
        private string _id;
        private bool _interactive;
        private string _name;
        private string _order;
        private Type[] _parametersTypes = new Type[0];
        private string _path;
        private TestTool.Tests.Definitions.Enums.RequirementLevel _requirementLevel;
        private double _version;

        public TestTool.Tests.Definitions.Enums.Category Category
        {
            get
            {
                return this._category;
            }
            set
            {
                this._category = value;
            }
        }

        public TestExecutionOrder ExecutionOrder
        {
            get
            {
                return this._executionOrder;
            }
            set
            {
                this._executionOrder = value;
            }
        }

        public Functionality[] FunctionalityUnderTest
        {
            get
            {
                return this._functionalityUnderTest;
            }
            set
            {
                this._functionalityUnderTest = value;
            }
        }

        public string Id
        {
            get
            {
                return this._id;
            }
            set
            {
                this._id = value;
            }
        }

        public bool Interactive
        {
            get
            {
                return this._interactive;
            }
            set
            {
                this._interactive = value;
            }
        }

        public string Name
        {
            get
            {
                return this._name;
            }
            set
            {
                this._name = value;
            }
        }

        public string Order
        {
            get
            {
                return this._order;
            }
            set
            {
                this._order = value;
            }
        }

        public Type[] ParametersTypes
        {
            get
            {
                return this._parametersTypes;
            }
            set
            {
                this._parametersTypes = value;
            }
        }

        public string Path
        {
            get
            {
                return this._path;
            }
            set
            {
                this._path = value;
            }
        }

        public Feature[] RequiredFeatures
        {
            get
            {
                return this._features;
            }
            set
            {
                this._features = value;
            }
        }

        public TestTool.Tests.Definitions.Enums.RequirementLevel RequirementLevel
        {
            get
            {
                return this._requirementLevel;
            }
            set
            {
                this._requirementLevel = value;
            }
        }

        public double Version
        {
            get
            {
                return this._version;
            }
            set
            {
                this._version = value;
            }
        }
    }
}

